/*********************************************************************************************************
 *
 *	模块名称 :用户输入内容解析模块
 *	文件名称 :Analysis_Usr_Command.c
 *	版    本 : V1.0
 *	说    明 :本模块用于分析并识别用户输入内容，并跳转至对应命令函数。
 *
 *              注意事项：
 *                务必将编辑器的缩进参数和TAB设置为4来阅读本文件，以使得代码显示整齐。
 *
 *	修改记录 :
 *		版本号       日期         作者        说明
 *		V1.0     2022-05-09     zrx
 *
 *	Copyright (C), 2022-2030, xxxx
 *
 *********************************************************************************************************/

#include "../include/Analysis_Usr_Command.h"
char *abuf[20] = {""};
const Menue a_command[] =
    {
        {"ls", Ls_Command},
        {"cp", Cp_Command},
        {"touch", Touch_Command},
        {"cat", Cat_Command},
        {"mv", Mv_Command},
        {"mkdir", Mkdir_Command},
        {"pwd", Pwd_Command},
        {"cd", Cd_Command},
        {"ln", Ln_Command},
        {"rm", Rm_Command},
        {"quit", Quit_Command}};
/*********************************************************************************************************
 *	函 数 名:Analysis_Usr_Command
 *	功能说明:分析并识别用户输入内容，并跳转至对应命令函数。
 *	形    参:string User content   string pointer array User content
 *  全局变量:无
 *	返 回 值:success 0    false -1
 *********************************************************************************************************/
int Analysis_Usr_Command(char *buf)
{
    abuf[0] = strtok(buf, " "); //分割用户内容

    int i;
    for (i = 0; abuf[i];)
    {
        if (i > 19)
        {
            printf("cd suff too many\n");
            for (i = 0; i < 20; i++)
            {
                abuf[i] = NULL;
            }
            return -1;
        }
        abuf[++i] = strtok(NULL, " ");
    }

    int Num = sizeof(a_command) / sizeof(Menue); //命令结构体数组个数
    for (i = 0; i < Num; i++)                    //查找是否存在对应命令
    {
        if (!strcmp(abuf[0], a_command[i].command))
        {
            a_command[i].command_fun(abuf);
            break;
        }
    }

    if (i == Num)
    {
        printf("%s :no command\n", abuf[0]);
    }

    return 0;
}